13、FLASH读写之三 | 您所在的位置:网站首页 › flash warning什么意思 › 13、FLASH读写之三 |
因为关于STM32的Flash相关的知识点比较多,所以该内容的学习我们分为以下4个部分 1、RAM和ROM的一些基本概念 —— STM32学习笔记:FLASH读写之一 2、STM32的Flash寄存器及介绍 —— STM32学习笔记:FLASH读写之二 3、STM32的Flash读写相关函数 —— STM32学习笔记:FLASH读写之三 4、STM32的Flash自己编辑函数 —— STM32学习笔记:FLASH读写之四 本文将详细介绍STM32的Flash读写相关的官方库函数 目录 0x01、解锁、锁定操作 0x02、写Flash函数 0x03、擦除函数 0x04、获取Flash状态函数 0x05、等待操作完成函数 0x06、读Flash函数 我们先来看一下STM32 的官方固件库操作 FLASH 的几个常用函数。这些函数和定义分布在文件 stm32f10x_flash.c 以及 stm32f10x_flash.h 文件中。 0x01、解锁、锁定操作void FLASH_Unlock(void) 函数功能:解锁Flash void FLASH_Lock(void) 函数功能:锁定Flash 0x02、写Flash函数FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data) 函数功能:向指定的地址写入一个字(32位)。 参数1:uint32_t Address —> 指定要写入的地址 参数2:uint32_t Data —> 指定要写入的数据 返回值:FLASH Status —> FLASH_ERROR_PG,FLASH_ERROR_WRP,FLASH_COMPLETE ,FLASH_TIMEOUT. FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data) 函数功能:向指定的地址写入一个半字(16位)。 参数1:指定要写入的地址 参数2:指定要写入的数据 返回值:FLASH Status —> FLASH_ERROR_PG,FLASH_ERROR_WRP,FLASH_COMPLETE ,FLASH_TIMEOUT. FLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data) 函数功能:向指定的地址写入一个字节(8位)。 参数1:指定要写入的地址 参数2:指定要写入的数据 返回值:FLASH Status —> FLASH_ERROR_PG,FLASH_ERROR_WRP,FLASH_COMPLETE ,FLASH_TIMEOUT. 0x03、擦除函数FLASH_Status FLASH_ErasePage(uint32_t Page_Address) 函数功能:擦除指定页 参数1:uint32_t Address —> 指定要擦除的地址 返回值:FLASH Status —> FLASH_BUSY,FLASH_ERROR_PG,FLASH_ERROR_WRP,FLASH_COMPLETE ,FLASH_TIMEOUT. FLASH_Status FLASH_EraseAllPages(void) 函数功能:擦除所有页 返回值:FLASH Status —> FLASH_ERROR_PG,FLASH_ERROR_WRP,FLASH_COMPLETE ,FLASH_TIMEOUT. FLASH_Status FLASH_EraseOptionBytes(void) 函数功能:擦除闪存选项字节。 返回值:FLASH Status —> FLASH_ERROR_PG,FLASH_ERROR_WRP,FLASH_COMPLETE ,FLASH_TIMEOUT. 0x04、获取Flash状态函数FLASH_Status FLASH_GetStatus(void) 函数功能:获取Flash状态。 返回值:FLASH Status —> FLASH_BUSY,FLASH_ERROR_PG,FLASH_ERROR_WRP,FLASH_COMPLETE 0x05、等待操作完成函数FLASH_Status FLASH_WaitForLastOperation(uint32_t Timeout) 函数功能:等待闪存操作完成或超时。 返回值:FLASH Status —> FLASH_ERROR_PG,FLASH_ERROR_WRP,FLASH_COMPLETE ,FLASH_TIMEOUT. 0x06、读Flash函数这个函数在标准库中没有,我们自己来编写一个,函数定义风格与库函数尽量保持一致。 uint16_t STMFLASH_ReadHalfWord(uint32_t faddr) 函数功能:读出指定地址的半字(16位)数据。 参数1:指定要写入的地址 返回值:读出的半字数据(16位) /** *@brief 读取指定地址的半字(16位数据) *@param faddr:读地址(此地址必须为2的倍数!!) *@return 读取的数据. */ uint16_t STMFLASH_ReadHalfWord(uint32_t faddr) { return *(vu16*)faddr; }注: 1、上述函数的返回值类型都是FLASH Status,该值是一个枚举型常量,定义如下 typedef enum { FLASH_BUSY = 1, // 忙 FLASH_ERROR_PG, // 编程错误 FLASH_ERROR_WRP, // 写保护错误 FLASH_COMPLETE, // 操作完成 FLASH_TIMEOUT // 操作超时 }FLASH_Status;2、因为写Flash,一次只能写入半字(16位),所以写一个字(32位)是通过写入2次实现的,写入一次后地址加2,再写入。那么写入1个字节数据也需要占用半个字的地址(16位地址)。 |
CopyRight 2018-2019 实验室设备网 版权所有 |